Hrvatski

Vodič za CSS Scroll Timelines, moćnu tehniku koja animacije povezuje s pozicijom skrolanja. Naučite stvarati privlačna i interaktivna korisnička iskustva.

CSS Scroll Timeline: Animacija na temelju pozicije skrolanja

Animacije pokretane skrolanjem (scroll-driven animations) revolucioniraju web dizajn, nudeći privlačna i interaktivna korisnička iskustva koja nadilaze tradicionalne statične rasporede. CSS Scroll Timelines pružaju nativno rješenje preglednika za stvaranje ovih animacija, izravno povezujući napredak animacije s pozicijom skrolanja elementa. To otvara svijet kreativnih mogućnosti za poboljšanje angažmana korisnika i pripovijedanje priča na webu.

Što su CSS Scroll Timelines?

CSS Scroll Timelines omogućuju vam kontrolu napretka CSS animacije ili prijelaza na temelju pozicije skrolanja određenog spremnika za skrolanje. Umjesto oslanjanja na tradicionalne vremenski temeljene animacije, gdje je trajanje animacije fiksno, napredak animacije izravno je vezan uz to koliko je korisnik skrolao. To znači da će se animacija pauzirati, reproducirati, premotavati unatrag ili unaprijed kao izravan odgovor na korisnikovo ponašanje skrolanja, stvarajući prirodnije i interaktivnije iskustvo. Zamislite traku napretka koja se popunjava dok skrolate niz stranicu ili elemente koji se postupno pojavljuju i nestaju dok ulaze u prikazni okvir (viewport) – to su efekti koji su lako ostvarivi uz CSS Scroll Timelines.

Zašto koristiti CSS Scroll Timelines?

Ključni koncepti i svojstva

Razumijevanje temeljnih koncepata i CSS svojstava ključno je za učinkovito korištenje Scroll Timelines:

1. Vremenska linija skrolanja (Scroll Timeline)

Svojstvo scroll-timeline definira spremnik za skrolanje koji će se koristiti kao vremenska linija za animaciju. Možete specificirati imenovanu vremensku liniju (npr. --my-scroll-timeline) ili koristiti unaprijed definirane vrijednosti poput auto (najbliži nadređeni spremnik za skrolanje), none (bez vremenske linije skrolanja) ili root (prikazni okvir dokumenta).

/* Definiranje imenovane vremenske linije skrolanja */
.scroll-container {
  scroll-timeline: --my-scroll-timeline;
}

/* Korištenje imenovane vremenske linije u animaciji */
.animated-element {
  animation-timeline: --my-scroll-timeline;
}

2. Vremenska linija animacije (Animation Timeline)

Svojstvo animation-timeline dodjeljuje vremensku liniju skrolanja animaciji. Ovo svojstvo povezuje napredak animacije s pozicijom skrolanja specificiranog spremnika. Također možete koristiti funkciju view() koja stvara vremensku liniju na temelju presijecanja elementa s prikaznim okvirom.

/* Povezivanje animacije s vremenskom linijom skrolanja */
.animated-element {
  animation-timeline: --my-scroll-timeline;
}

/* Korištenje view() za animacije temeljene na prikaznom okviru */
.animated-element {
  animation-timeline: view();
}

3. Pomaci skrolanja (Scroll Offsets)

Pomaci skrolanja definiraju početne i završne točke vremenske linije skrolanja koje odgovaraju početku i kraju animacije. Ovi pomaci omogućuju vam preciznu kontrolu kada animacija započinje i završava na temelju pozicije skrolanja. Možete koristiti ključne riječi poput cover, contain, entry, exit i numeričke vrijednosti (npr. 100px, 50%) za definiranje tih pomaka.

/* Animiraj kada je element potpuno vidljiv */
.animated-element {
  scroll-timeline-axis: block;
  animation-timeline: view(block);
  animation-range: entry 0% cover 100%;
}

/* Započni animaciju 100px od vrha, završi kada je dno udaljeno 200px od dna prikaznog okvira */
.animated-element {
  scroll-timeline-axis: block;
  animation-timeline: view(block);
  animation-range: 100px exit 200px;
}

4. Osi vremenske linije skrolanja (Scroll Timeline Axis)

Svojstvo scroll-timeline-axis specificira os duž koje napreduje vremenska linija skrolanja. Može se postaviti na block (vertikalno skrolanje), inline (horizontalno skrolanje), both (obje osi) ili auto (određuje preglednik). Kada koristite `view()`, preporučuje se eksplicitno navesti os.

/* Definiranje osi vremenske linije skrolanja */
.scroll-container {
  scroll-timeline-axis: y;
}

/* S funkcijom view */
.animated-element {
  scroll-timeline-axis: block;
}

5. Raspon animacije (Animation Range)

Svojstvo `animation-range` definira pomake skrolanja (početne i završne točke) koji odgovaraju početku (0%) i kraju (100%) animacije. To vam omogućuje mapiranje specifičnih pozicija skrolanja s napretkom animacije.

/* Mapiranje cijelog raspona skrolanja na animaciju */
.animated-element {
  animation-range: entry 0% cover 100%;
}

/* Započni animaciju na pola raspona skrolanja */
.animated-element {
  animation-range: 50% 100%;
}

/* Korištenje vrijednosti u pikselima */
.animated-element {
  animation-range: 100px 500px;
}

Praktični primjeri i slučajevi upotrebe

Istražimo neke praktične primjere kako koristiti CSS Scroll Timelines za stvaranje privlačnih animacija:

1. Traka napretka (Progress Bar)

Klasičan slučaj upotrebe za animacije pokretane skrolanjem je traka napretka koja se popunjava dok korisnik skrola niz stranicu. To pruža vizualnu povratnu informaciju o tome koliko je korisnik napredovao kroz sadržaj.

/* CSS */
.progress-container {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 5px;
  background-color: #eee;
  z-index: 1000;
}

.progress-bar {
  height: 5px;
  background-color: #4CAF50;
  width: 0%;
  animation: fillProgressBar linear;
  animation-timeline: view();
  animation-range: entry 0% cover 100%;
  transform-origin: 0%;
  animation-fill-mode: forwards;
}

@keyframes fillProgressBar {
  to {
    width: 100%;
  }
}

/* HTML */
<div class="progress-container">
  <div class="progress-bar"></div>
</div>
<div class="content">
  <p>... vaš sadržaj ovdje ...</p>
</div>

Ovaj kod stvara fiksnu traku napretka na vrhu stranice. Animacija fillProgressBar postupno povećava širinu trake napretka od 0% do 100% dok korisnik skrola niz stranicu. animation-timeline: view() povezuje animaciju s napretkom skrolanja prikaznog okvira, a `animation-range` povezuje skrolanje s vizualnim napretkom.

2. Postupno pojavljivanje slike (Image Fade-In)

Možete koristiti Scroll Timelines za stvaranje suptilnog efekta postupnog pojavljivanja slika dok ulaze u prikazni okvir, poboljšavajući vizualnu privlačnost vašeg sadržaja.

/* CSS */
.fade-in-image {
  opacity: 0;
  transform: translateY(20px);
  animation: fadeIn linear;
  animation-timeline: view();
  animation-range: entry 25% cover 75%;
  animation-fill-mode: both;
}

@keyframes fadeIn {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* HTML */
<img src="image.jpg" class="fade-in-image" alt="Slika">

Ovaj kod početno skriva sliku i pozicionira je malo ispod konačne pozicije. Dok slika ulazi u prikaz skrolanjem, animacija fadeIn postupno povećava prozirnost i pomiče sliku na njezinu izvornu poziciju, stvarajući glatki efekt postupnog pojavljivanja. `animation-range` specificira da animacija započinje kada je gornji rub slike 25% unutar prikaznog okvira i završava kada je donji rub 75% unutar prikaznog okvira.

3. Ljepljivi elementi (Sticky Elements)

Postignite "ljepljive" efekte – gdje se elementi lijepe za vrh prikaznog okvira tijekom skrolanja – ali s poboljšanom kontrolom i prijelazima. Zamislite navigacijsku traku koja se glatko pretvara u sažetu verziju kako korisnik skrola prema dolje.

/*CSS*/
.sticky-container {
  height: 200px; /* Prilagodite svojim potrebama */
  position: relative;
}

.sticky-element {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  background-color: #f0f0f0;
  padding: 20px;
  box-sizing: border-box;
  animation: stickyAnimation linear;
  animation-timeline: view();
  animation-range: entry 0% cover 20%; /* Prilagodite raspon po potrebi */
  animation-fill-mode: both;
  z-index: 10;
}

@keyframes stickyAnimation {
  0% {
    position: absolute;
    top: 0;
  }
  100% {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    background-color: #ddd; /* Promijenite boju kako biste označili ljepljivost */
  }
}

/* HTML */
<div class="sticky-container">
  <div class="sticky-element">Moj ljepljivi element</div>
</div>

U ovom primjeru, element prelazi iz `position: absolute` u `position: fixed` dok ulazi u gornjih 20% prikaznog okvira, stvarajući glatki "ljepljivi" efekt. Prilagodite `animation-range` i CSS svojstva unutar ključnih okvira (keyframes) kako biste prilagodili ponašanje.

4. Efekt paralaksnog skrolanja

Stvorite efekt paralaksnog skrolanja gdje se različiti slojevi sadržaja pomiču različitim brzinama dok korisnik skrola, dodajući dubinu i vizualnu zanimljivost stranici.

/* CSS */
.parallax-container {
  position: relative;
  height: 500px; /* Prilagodite svojim potrebama */
  overflow: hidden;
}

.parallax-layer {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-size: cover;
  background-position: center;
}

.parallax-layer--bg {
  background-image: url("background.jpg");
  animation: parallaxBg linear;
  animation-timeline: view();
  animation-range: entry 0% cover 100%;
  transform-origin: 50% 0%;
  animation-fill-mode: both;
}

.parallax-layer--fg {
 background-image: url("foreground.png");
  animation: parallaxFg linear;
  animation-timeline: view();
  animation-range: entry 0% cover 100%;
  transform-origin: 50% 0%;
  animation-fill-mode: both;
}

@keyframes parallaxBg {
 to {
    transform: translateY(50px); /* Prilagodite za brzinu paralakse */
 }
}

@keyframes parallaxFg {
 to {
   transform: translateY(100px); /* Prilagodite za brzinu paralakse */
 }
}

/* HTML */
<div class="parallax-container">
  <div class="parallax-layer parallax-layer--bg"></div>
  <div class="parallax-layer parallax-layer--fg"></div>
</div>

Ovaj primjer stvara dva sloja s različitim pozadinskim slikama. Animacije `parallaxBg` i `parallaxFg` pomiču slojeve različitim brzinama, stvarajući efekt paralakse. Prilagodite vrijednosti `translateY` u ključnim okvirima za kontrolu brzine svakog sloja.

5. Animacija otkrivanja teksta

Otkrivajte tekst znak po znak dok korisnik skrola preko određene točke, privlačeći pažnju i poboljšavajući pripovjedački aspekt sadržaja.

/* CSS */
.text-reveal-container {
  position: relative;
  overflow: hidden;
}

.text-reveal {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  animation: textRevealAnimation steps(1) forwards;
  animation-timeline: view();
  animation-range: entry 25% cover 75%;
  animation-fill-mode: both;
  width: 0;
}

@keyframes textRevealAnimation {
  to {
    width: 100%;
  }
}

/* HTML */
<div class="text-reveal-container">
  <span class="text-reveal">Ovaj tekst će se otkrivati dok skrolate.</span>
</div>

Ovaj primjer koristi vremensku funkciju `steps(1)` za otkrivanje teksta znak po znak. `width: 0` početno skriva tekst, a `textRevealAnimation` postupno povećava širinu kako bi otkrila cijeli tekst. Prilagodite `animation-range` kako biste kontrolirali kada animacija otkrivanja teksta započinje i završava.

Kompatibilnost s preglednicima i Polyfillovi

CSS Scroll Timelines su relativno nova tehnologija, a podrška preglednika se još uvijek razvija. Krajem 2023. godine, vodeći preglednici poput Chromea i Edgea nude dobru podršku. Firefox i Safari aktivno rade na implementaciji ove značajke. Ključno je provjeriti trenutnu kompatibilnost preglednika prije implementacije Scroll Timelines u produkciji. Možete koristiti resurse poput Can I use za provjeru statusa podrške.

Za preglednike koji ne podržavaju nativno Scroll Timelines, možete koristiti polyfillove kako biste pružili sličnu funkcionalnost. Polyfill je dio JavaScript koda koji implementira nedostajuću značajku koristeći JavaScript. Dostupno je nekoliko polyfillova za CSS Scroll Timelines, što vam omogućuje korištenje značajke čak i u starijim preglednicima.

Razmatranja o pristupačnosti

Iako animacije pokretane skrolanjem mogu poboljšati korisničko iskustvo, ključno je uzeti u obzir pristupačnost kako bi vaša web stranica bila upotrebljiva svima, uključujući korisnike s invaliditetom.

Najbolje prakse i savjeti

Evo nekoliko najboljih praksi i savjeta za učinkovito korištenje CSS Scroll Timelines:

Globalna razmatranja za dizajn animacija

Kada dizajnirate animacije za globalnu publiku, imajte na umu ove točke:

Zaključak

CSS Scroll Timelines nude moćan i učinkovit način za stvaranje privlačnih i interaktivnih web animacija. Povezivanjem napretka animacije s pozicijom skrolanja, možete stvoriti iskustva koja su dinamičnija, responzivnija i prilagođenija korisniku. Iako se podrška preglednika još uvijek razvija, prednosti korištenja CSS Scroll Timelines – poboljšane performanse, deklarativni pristup i poboljšano korisničko iskustvo – čine ih vrijednim alatom za moderne web programere. Dok eksperimentirate sa Scroll Timelines, ne zaboravite dati prioritet pristupačnosti i uzeti u obzir globalni kontekst vaše publike kako biste stvorili istinski uključiva i privlačna web iskustva.

Prihvatite ovu uzbudljivu novu tehnologiju i otključajte svijet kreativnih mogućnosti za svoje web projekte. Budućnost web animacije je ovdje, a nju pokreće skrolanje!